package com.cn.web.service.imp;

import java.util.List;
import java.util.Map;

import com.cn.web.dao.BaseDao;
import com.cn.web.entity.BaseEntity;
import com.cn.web.service.BaseService;
import com.github.pagehelper.PageHelper;
public abstract  class AbstractService<T extends BaseEntity> implements BaseService<T> {
	
	  private BaseDao<T> baseDao;
	  
	  public void setBaseDao(BaseDao<T> baseDao) {
	    this.baseDao = baseDao;
	  }
	  
		/**
		 * 获取检索条件对象
		 * @return BaseService
		 */
		protected abstract T getQueryEntity(T entity) ;
  
	/**
	 * Insert语句
	 * 
	 * @param entity entity实体对象
	 * @return 影响条数
	 */
	public int insert(T entity){
	    return baseDao.insert(entity);
	};
	
	/**
	 * Update语句
	 * 
	 * @param entity entity实体对象
	 * @return 影响条数
	 */
	public int update(T entity){
		return baseDao.update(entity);
	};
	
	/**
	 * 逻辑删除，更新 record_status（记录状态）为0（失效）
	 * 
	 * @param entity entity实体对象
	 * @return 影响条数
	 */
	public int delete(T entity){
		return baseDao.delete(entity);
	};
	
	/**
	 * 检索，根据ID检索
	 * @param id 关键字
	 * @param entityClass entity对象类型
	 * @return entity实体Map
	 */
	public Map<?, ?> selectByKey(long id,Class<T> entityClass){
		return baseDao.selectByKey(id,entityClass);
	};
	
	/**
	 * 检索，根据entity对象以及检索条件检索
	 * 
	 * @param entity entity实体对象
	 * @return entity实体Map的List组合
	 */
	public List<Map> selectByParams(T entity){
		getQueryEntity(entity);
		PageHelper.startPage(1, 10);
		return baseDao.selectByParams(entity);
		
		
	};

	/**
	 * 逻辑删除，更新 record_status（记录状态）为0（失效）
	 * 
	 * @param entity entity实体对象
	 * @return 影响条数
	 */
	public void deleteByIdInBatch(List<String> asList, T deleteEntity){
		
		if (asList == null || asList.isEmpty())
			return;
		for (String id : asList) {
			deleteEntity.setId(Long.valueOf(id));
			baseDao.delete(deleteEntity);
		}
	};
}